﻿package org.rkuk.kasutil.timeline.conditions 
{
	import org.rkuk.kasutil.timeline.ITicker;
	import org.rkuk.kasutil.timeline.ITickInfo;
	import org.rkuk.kasutil.timeline.Timeline;
	/**
	 * 对两个被添加的ITickerUpdateCondition条件进行逻辑异或运算
	 * @author rkuk
	 */
	public class Xor extends LogicCondition
	{
		/**
		 * 构造函数
		 */
		public function Xor() 
		{
			super();
		}
		
		/**
		 * 添加条件,异或逻辑只能添加两个ITickerUpdateCondition，多添加的条件无效。
		 * @param	condition	被添加的ITickerUpdateCondition
		 * @return	条件是否添加成功
		 */
		override public function addCondition(condition:ITickerUpdateCondition):Boolean 
		{
			if (_conditions.length > 2)
				return false;
				
			return super.addCondition(condition);
		}
		
		/**
		 * 实现多个被添加的ITickerUpdateCondition条件的逻辑异或运算并返回结果
		 * @param	timeline	发出刷新信号的Timeline对象
		 * @param	ticker		可能将要被刷新的ITicker对象
		 * @param	tickInfo	Timeline发出刷新信号时的时间信息
		 * @return	true表示ITicker需要被刷新，false表示ITicker不需要被刷新
		 */
		override public function isNeedUpdate(timeline:Timeline,ticker:ITicker, tickInfo:ITickInfo):Boolean 
		{
			var result1:Boolean = _conditions[0].isNeedUpdate(timeline,ticker, tickInfo);
			var result2:Boolean = _conditions[1].isNeedUpdate(timeline,ticker, tickInfo);
			
			if ((result1 && result2) || (!result1 && !result2))
				return false;
			else
				return true;
		}
	}

}